﻿//小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案，分别将他们列为两个数​列。
//两个数组的和相同。定义一次合并操作可以将某数组内相邻的两个数合并为一个新数，
//新数的值是原来两个数的和。小明想通过若干次合并操作将两个数组变成一模一样，即
//输出格式
//输出共
//1
//1 行，一个整数。
//输入输出样例
//输入 #1复制
//4 3
//1 2 3 4
//1 5 4
//输出：
//1


#include<bits/stdc++.h>
using namespace std;
//由数组过渡到deque（数组下标是“死的”造成干扰）
//双端队列应用：重点是这里的数组总和都是相等的，也就说明我们下面
//用下标0 1去访问是不会越界的，也就是当一个队列空了，另一个也一定空
int main() {
    deque<int> a1, a2;
    int n, m, a, b;
    cin >> n >> m;
    int sum = 0;
    while (n--) cin >> a, a1.emplace_back(a);
    while (m--) cin >> b, a2.emplace_back(b);
    while (!a2.empty()) {
        if (a1[0] == a2[0]) {
            a1.pop_front();
            a2.pop_front();
        }
        else if (a1[0] < a2[0]) {
            a1[1] += a1[0];//模拟合并
            a1.pop_front();
            sum++;

        }
        else {
            a2[1] += a2[0];//模拟合并
            a2.pop_front();
            sum++;
        }
    }

    cout << sum << endl;

    return 0;
}

//上面的布局可以用序列
//2
//4
//6
//1
//3
//5
//2 4 6 1 3 5 来描述，第
//i 个数字表示在第
//i 行的相应位置有一个棋子，如下：
//行号
//1
//2
//3
//4
//5
//6
//1 2 3 4 5 6
//列号
//2
//4
//6
//1
//3
//5
//2 4 6 1 3 5
//这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。
//并把它们以上面的序列方法输出，解按字典顺序排列。
//请输出前
//3
//3 个解。最后一行是解的总个数。


//输入 #1复制
//6
//输出 #1复制
//2 4 6 1 3 5
//3 6 2 5 1 4
//4 1 5 2 6 3
//4
//


#include<bits/stdc++.h>
using namespace std;
int n;
bool col[14] = { false };
bool row[14] = { false };
bool main_diag[26] = { false };
bool sec_diag[27] = { false };
vector<vector<int>>v;
vector<int>path;
int pos = 1;
int ret = 0;
void  dfs() {
    if (pos > n) {
        if (v.size() < 3) v.push_back(path);
        ret++;
        return;
    }
    for (int j = 1; j <= n; j++) {
        if (col[j] || row[pos] || main_diag[j - pos + n] || sec_diag[j + pos]) continue;
        col[j] = row[pos] = main_diag[j - pos + n] = sec_diag[j + pos] = 1;
        pos++;
        path.push_back(j);
        dfs();
        pos--;
        path.pop_back();
        col[j] = row[pos] = main_diag[j - pos + n] = sec_diag[j + pos] = 0;


    }

}
int main() {
    cin >> n;
    dfs();
    for (int i = 0; i < v.size(); i++) {
        for (auto a : v[i])cout << a << " ";
        cout << endl;
    }
    cout << ret << endl;
    return 0;
}